package dujiu.leetcode.slidingWindow.fixed_lengthSlidingWindow;

import java.util.*;

public class P2841 {
    public long maxSum(List<Integer> nums, int m, int k) {
        // Integer[] array = nums.toArray(Integer[]::new);
        int[] array = new int[nums.toArray().length];
        for (int i = 0; i < nums.size(); i++) {
            array[i] = nums.get(i);
        }
        long ans = 0;
        long sum = 0;
        Map<Integer,Integer> map = new HashMap<>();
        for (int i = 0; i < array.length; i++) {
            // 进入窗口
            sum += array[i];
            /*取出旧值
            用 Integer::sum 函数将旧值和 1 相加（即 oldValue + 1）
            将结果作为新值存回 Map
            */
            map.merge(array[i],1,Integer::sum);
            if (i<k-1){
                continue;
            }

            // 更新答案
            if (map.size() >= m){
                ans = Math.max(ans,sum);
            }

            // 离开窗口
            int out = array[i-k+1];
            sum -= out;
            if (map.get(out) > 1){
                map.put(out,map.get(out)-1);
            }else {
                map.remove(out);
            }
        }
        return ans;
    }
}
